home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib16.dsk / ARTILLERY DUEL.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  126 lines

  1. 10  REM  **********************
  2. 11  REM  *   ARTILLERY DUEL   *
  3. 12  REM  *  BY LUDWIG REISKY  *
  4. 13  REM  * COPYRIGHT (C) 1984 *
  5. 14  REM  * BY MICROSPARC, INC *
  6. 15  REM  * LINCOLN, MA. 01773 *
  7. 16  REM  **********************
  8. 18  REM 
  9. 100  PRINT  CHR$(4)"BLOADSHAPES"
  10. 200  LOMEM: 24576: REM PROTECT VARIABLES
  11. 210  DIM Y(279),GX(1),GY(1),A(1),PW(1),SK(1)
  12. 220 X = 0:Y = 80
  13. 230  POKE 232,X: POKE 233,Y: GOSUB 30010
  14. 240 XO = X:YO = X:XN = X:YN = X:W = X:UO = X:VO = X:YL = 160:ERRFLAG = 216:PUSHBUTTN = 49249
  15. 300  REM IMPORTANT PARAMETERS
  16. 310 POWER = .14:CRAVITY = 3E -4:FRICT = .006:WIND = .08:ACCURACY = 3:HEIGHT = 110
  17. 320 RESOL = 10
  18. 330 PO = PO *RE:CR = CR *RE *RE:WI = WI *RE
  19. 400  REM POINTERS AND CONSTANTS
  20. 410 P1 = X +Y *256 +39:P2 = P1 +171:P3 = P2 +166:P4 = P3 +28:P5 = P4 +86:EH = P5 +60
  21. 420  REM P1,P2=LANDSCAPE DATA    P3=EXPLOSION CRATER         P4=SOUND DATA  P5=SOUNDPROGREH=ERROR HANDLING
  22. 430 X =  INT(P4/256 +.001):Y = P4 -256 *X: POKE 252,Y: POKE 253,X
  23. 440 A1 = 140:A2 = 155:A3 = 5:A4 = .5298:A5 = .5:A6 = .0941175:A7 = .3923:PA = 3.14159/180
  24. 450 P$(0) = "<=":P$(2) = "=>"
  25. 500  GOSUB 6010: GOTO 20010
  26. 600  REM  TRAJECTORY
  27. 610 X = W -UO:Y = ( ABS(X) + ABS(VO)) *FR:UO = UO +X *Y:VO = VO +CR -VO *Y:XN = XO +UO:YN = YO +VO: ONERR  GOTO 710
  28. 620  XDRAW 4 AT XO,YO
  29. 630 XO = XN:YO = YN: XDRAW 4 AT XN,YN: POKE ER,0: IF YN <Y(XN)  THEN 610
  30. 640  XDRAW 4 AT XN,YN: GOSUB 11010: ON HT +1 GOTO 21010,25010
  31. 700  REM ERROR HANDLING
  32. 710  CALL EH: ONERR  GOTO 730
  33. 720  GOTO 630
  34. 730  CALL EH: POKE ER,0: IF YN >YL  THEN 21010
  35. 740  GOTO 610
  36. 2000  REM GET ELEVATION ANGLE AND MUZZLE POWER
  37. 2010  SCALE= 8: HCOLOR= 0: FOR I = 48 TO 80: ROT= I: GOSUB 4020: NEXT I
  38. 2020 K = 2 +35 *P:K1 = 7 +25 *P:I = P: FLASH : GOSUB 12100: NORMAL 
  39. 2030  IF  PEEK(PU +P) >127  THEN  HCOLOR= 3: GOSUB 4010: GOTO 2060
  40. 2040 Y =  PDL(P): HCOLOR= 3: GOSUB 4010
  41. 2050 A(P) =  INT(135.1 *  NOT P +(P -  NOT P) *Y *A4): VTAB 21: HTAB K:X = A(P): GOSUB 12120: HCOLOR= 0: GOSUB 4010: GOTO 2030
  42. 2060 C =  COS(A(P) *PA) * SGN(A5 -P):S =  SIN(A(P) *PA)
  43. 2070  VTAB 21: HTAB K1: PRINT "   ": IF  PEEK(PU +P) >127  THEN 2070: REM  RELEASE BUTTON
  44. 2100  REM GET POWER VALUE
  45. 2110  FLASH : GOSUB 12110: NORMAL 
  46. 2120  IF  PEEK(PU +P) >127  THEN 2140
  47. 2130 PW(P) =  INT(A7 * PDL(P)): VTAB 22: HTAB K:X = PW(P): GOSUB 12120: GOTO 2120
  48. 2140  VTAB 22: HTAB K1: PRINT "   ": RETURN 
  49. 3000  REM PLOT LANDSCAPE AND WIND VECTOR
  50. 3010  HOME : HGR : HCOLOR= 3: FOR I = 0 TO 278: HPLOT I,Y(I) TO I +1,Y(I +1): NEXT I
  51. 3020  HPLOT A1,12 TO A1,0 TO A1 +60/WI *W,A3 TO A1,10: RETURN 
  52. 4000  REM DRAW BARREL
  53. 4010  ROT= 56.5 -8 *P +Y *A6
  54. 4020  DRAW 4 AT GX(P),GY(P) -1: RETURN 
  55. 5000  REM DRAW GUNS
  56. 5010  IF I = 0  THEN GX(I) =  INT(140 - RND(1) *110 -10)
  57. 5015  IF I = 1  THEN GX(I) =  INT(140 + RND(1) *110 +10)
  58. 5020 GY(I) = Y(GX(I)) -3
  59. 5030  ROT= 0: SCALE= 3: DRAW 1 AT GX(I),GY(I): RETURN 
  60. 6000  REM GENERATE LANDSCAPE
  61. 6010 X =  INT( RND(1) *A1):Y = ( RND(1) *3 +8) *HE *.125E -5
  62. 6020  FOR I = 0 TO 279:Y(I) = A2 - INT( PEEK(P1 + ABS(I -A1)) * PEEK(P2 + ABS(A1 - ABS(I -A1 +X))) *Y): NEXT I
  63. 6030  RETURN 
  64. 7000  REM PLOT DETONATION
  65. 7010  ROT= 0: FOR I = 1 TO 2: SCALE= I: XDRAW 2 AT XM,YM: NEXT I: RETURN 
  66. 8000  REM DIG HOLE AND REPAIR DAMAGE
  67. 8010  FOR I = 0 TO 8:R = XM +I:L = XM -I: IF   NOT I  THEN Z = R: GOSUB 8100: NEXT I
  68. 8020  IF L > = 0  THEN Z = L: GOSUB 8100: HCOLOR= 3: HPLOT L +1,Y(L +1) TO L,Y(L)
  69. 8030  IF R < = 279  THEN Z = R: GOSUB 8100: HCOLOR= 3: HPLOT R -1,Y(R -1) TO R,Y(R)
  70. 8040  NEXT I: IF   NOT HT  THEN  HCOLOR= 3: FOR I = 0 TO 1: GOSUB 5020: NEXT I
  71. 8050  RETURN 
  72. 8100  IF I < >8  THEN  HCOLOR= 0: HPLOT Z,160 TO Z,Y(Z) -25:Y(Z) = Y(Z) +8 - PEEK(P3 +I): IF Y(Z) >159  THEN Y(Z) = 159
  73. 8110  RETURN 
  74. 9000  REM DESTROY GUN
  75. 9010 XD = 74: IF YM -XD <1  THEN XD = YM -1
  76. 9015  SCALE= 3: FOR I = 12 TO XD: HCOLOR= 3: ROT= 2 *I: DRAW 1 AT XM,YM -I: HCOLOR= 0: DRAW 1 AT XM,YM -I: NEXT 
  77. 9020  HCOLOR= 3: ROT= 2 *I: DRAW 1 AT XM,YM -I: GOSUB 7010: GOSUB 8010
  78. 9030  SCALE= 3: FOR I = XD +1 TO 2  STEP  -1: HCOLOR= 3: ROT= 172 -2 *I: DRAW 1 AT XM,YM -I
  79. 9040  HCOLOR= 0: DRAW 1 AT XM,YM -I: NEXT I
  80. 9050  POKE P5 +1,2: CALL P5: POKE P5 +1,20: GOTO 10010
  81. 10000  REM WAVE FLAG
  82. 10010  SCALE= 4:X = 0
  83. 10020  FOR I = 1 TO 63: HCOLOR= 3: ROT= X: GOSUB 10100:Y = 4 * SIN(.3 *I) +64: IF I < >63  THEN I = I: HCOLOR= 0: GOSUB 10100
  84. 10030 X = Y: NEXT I: RETURN 
  85. 10100  DRAW 3 AT XM,Y(XM): RETURN 
  86. 11000  REM CALCULATE POINT OF IMPACT,EXECUTE CONSEQUENCES
  87. 11010 XM =  INT(XN +XO) *A5:YM =  INT(YN +YO) *A5:X =  ABS(XN -XO) *A5:Y =  ABS(YN -YO) *A5: IF (X <2)  AND (Y <2)  THEN 11040
  88. 11020  IF Y(XM) >YM  THEN XO = XM:YO = YM: GOTO 11010
  89. 11030  IF Y(XM) <YM  THEN XN = XM:YN = YM: GOTO 11010
  90. 11040  IF YM >150  THEN YM = 150
  91. 11050  GOSUB 7010: CALL P5: FOR I = 0 TO 1: IF  ABS(XM -GX(I)) <AC  THEN SK(  NOT I) = SK(  NOT I) +1:HT = 1: GOTO 11070
  92. 11060  NEXT I
  93. 11070  ON I +1 GOTO 9010,9010,11080
  94. 11080  GOSUB 7010: GOSUB 8010: RETURN 
  95. 12000  REM  PRINT ELEVATION, POWER, SCORE, WIND
  96. 12010  FOR I = 0 TO 1:K1 = 2 +35 *I: GOSUB 12100: GOSUB 12110: HTAB K1: PRINT SK(I): NEXT I
  97. 12020  VTAB 21: HTAB 13: PRINT "<= ELEVATION =>": HTAB 13: PRINT "<=   POWER   =>": HTAB 13: PRINT "<=   SCORE   =>":K1 =  INT( ABS(60 *W)): HTAB 15: PRINT "WIND  ";K1;" ";P$( SGN(W) +1);"    ";: VTAB 5: PRINT : RETURN 
  98. 12100  VTAB 21: HTAB K1:X = A(I): GOTO 12120
  99. 12110  VTAB 22: HTAB K1:X = PW(I)
  100. 12120  PRINT  LEFT$( STR$(X) +"  ",3): RETURN 
  101. 13000  REM WIND
  102. 13010 W = WI *( RND(1) -.5): RETURN 
  103. 14000  REM CONTINUE?
  104. 14010  VTAB 24: PRINT "PRESS SPACE-BAR TO CONTINUE, ESC TO END";: GET X$: IF  ASC(X$) = 27  THEN  HOME : POP : END 
  105. 14020  RETURN 
  106. 20000  REM MAIN PROGRAM
  107. 20010  GOSUB 14010: GOSUB 13010:BG = 1
  108. 20020 P = BG:BG =   NOT BG
  109. 20030  GOSUB 3010: FOR I = 0 TO 1: GOSUB 5010: NEXT I: GOSUB 12010
  110. 21000  REM NEXT PLAYER
  111. 21010  IF GS  THEN  HCOLOR= 0: GOSUB 3020: GOSUB 13010: HCOLOR= 3: GOSUB 3020: GOSUB 12020
  112. 21015  GOSUB 12010
  113. 21020 HT =  FRE(0):HT = 0:P =   NOT P: GOSUB 2010:XM = GX(P) +15 *C:YM = GY(P) -15 *S:XO = GX(P):YO = GY(P):VA = PO * SQR(PW(P)):UO = VA *C:VO =  -VA *S
  114. 21030  GOSUB 7010: POKE P5 +1,8: CALL P5: POKE P5 +1,20: GOSUB 7010: SCALE= 1: GOTO 610
  115. 25000  REM NEW GAME?
  116. 25010  GOSUB 14010: TEXT : HOME : VTAB 7: PRINT "DO YOU WANT THE SAME LANDSCAPE (Y/N) ?": PRINT : PRINT "USE CTRL KEY IF YOU WANT THE WIND NOT TOBE GUSTY! ";
  117. 25020  GET X$:X =  ASC(X$):GS = 1: IF X <32  THEN GS = 0
  118. 25030  IF (X < >78)  AND (X < >14)  THEN  HOME : GOSUB 13010: GOTO 20020
  119. 25040  VTAB 20: HTAB 6: FLASH : PRINT " THAT TAKES A LITTLE TIME ! ": NORMAL : GOSUB 6010: GOSUB 13010: GOTO 20020
  120. 30000  REM INSTRUCTIONS
  121. 30010  TEXT : HOME 
  122. 30020  VTAB 2: HTAB 14: PRINT "ARTILLERY DUEL": VTAB 3: HTAB 13: PRINT "****************"
  123. 30030  VTAB 5: PRINT "THIS GAME SIMULATES A DUEL BETWEEN TWO  ARTILLERY GUNS.  THE VARIABLES ARE THE  LANDSCAPE, THE POSITION OF THE GUN, AND THE WIND, WHICH IS SYMOBOLIZED BY AN    ARROW IN THE UPPER PART OF THE SCREEN."
  124. 30040  PRINT : PRINT "YOU CONTROL THE ELEVATION ANGLE AND     MUZZLE POWER OF YOUR SHOT BY USING GAME PADDLES AND PUSHBUTTONS."
  125. 30050  PRINT : PRINT "FIRST, YOU USE YOUR PADDLES TO DETERMINETHE ELEVATION ANGLE OF YOUR SHOT, AND   THEN YOU USE THEM TO SET THE MUZZLE     POWER."
  126. 30060  PRINT : PRINT "ONCE THE MUZZLE POWER IS INPUT, THE     SHOT IS FIRED!": VTAB 23: PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **";: VTAB 23: PRINT : RETURN